﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>SetKeyDelay</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../css/commands.css" rel="stylesheet" type="text/css">
<link href="../css/print.css" rel="stylesheet" type="text/css" media="print">
</head>
<body>

<h1>SetKeyDelay</h1>

<p>设置 <a href="Send.htm">Send</a> 和 <a href="ControlSend.htm">ControlSend</a> 命令发送的两次按键事件间的延时。</p>

<p class="CommandSyntax">SetKeyDelay [, Delay, PressDuration, Play]</p>
<h3>参数 </h3>
<table border="1" width="100%" cellspacing="0" cellpadding="3" bordercolor="#C0C0C0">
  <tr> 
    <td width="15%">Delay</td>
    <td width="85%">延时时间，单位毫秒。可以是一个 <a href="../Variables.htm#Expressions">expression/表达式</a> 。使用 -1 表示无延时，使用 0 表示最小延时（但是，如果使用了 <em>Play</em> 参数的话，0 和 -1 都表示无延时）。留空则保持当前的 <em>延时</em> 不变。</td>
  </tr>
  <tr>
    <td>PressDuration<br>      </td>
    <td><p><a name="dur"></a>按键时长。有些游戏或者特殊的应用程序要求每次按键有一定的按下时间。也就是说，按下一个按键，停顿一段时间，再松开。</p>
      <p>使用 -1 表示无停顿，使用 0 表示最小停顿（但是，如果使用了 <em>Play</em> 参数的话，0 和 -1 都表示无停顿）。留空则保持当前的 <em>按键时长</em> 不变</p>
	  <p>注意：<em>PressDuration</em> 参数同样会在功能键（CTRL，ALT，SHIFT，以及 WIN）状态改变的时候产生一个停顿。</p>
    <p>这个参数可以是一个 <a href="../Variables.htm#Expressions">expression/表达式</a> 。</p></td>
  </tr>
  <tr>
    <td>Play<br>
    [v1.0.43+]</td>
    <td>这个参数使用单词 <em>Play</em> 的话，表示这是为 <a href="Send.htm#SendPlayDetail">SendPlay 模式</a> 设置的延时，而不是一般的 SendEvent 模式。如果脚本中从未使用过这个参数，则 SendPlay 模式的延时永远是 -1/-1 。</td>
  </tr>
</table>

<h3>注意</h3>
<p><strong>注意：</strong>SetKeyDelay 的设置对 <a href="Send.htm#SendInputDetail">SendInput</a> 是无效的，在那个模式中永远是无延时。同样，对启用了 <a href="SendMode.htm">SendMode Input</a> 设置的 <a href="Send.htm">Send</a> 命令也是无效的。</p>
<p>脚本在执行了每个 <a href="Send.htm">Send</a> 或 <a href="ControlSend.htm">ControlSend</a> 命令发送的按键事件之后，会有一个自动的延时（休眠）。这样做的目的是提高脚本的可靠性，因为一个窗口一般无法响应太过频繁的按键事件。</p>
<p>根据系统的时间精度，设置的延时可能会被四舍五入为最近的整十数字。例如在 XP 中，1 到 10 之间的延时（包括 10 ）都等效于 10 （NT 和 2000 中也是这样）。</p>
<p>在 Send/SendEvent 模式中，设置延时为 0 的话相当于执行了命令 Sleep(0) ，它会将当前脚本的剩余时间片分配给有需要的进程。如果没有进程需要，延时 0 就相当于完全没有延时。相反的，设置延时为 －1 表示永远没有延时。为了提高脚本的可靠性，一般推荐使用 0 而不是 －1 。</p>
<p>当延时设置为 －1 的时候，在 <a href="SendMode.htm">SendEvent 模式</a> 中，脚本发送按键事件的速度取决于脚本进程的优先级。提升一个脚本的优先级，使用 <em><a href="Process.htm">Process</a>, Priority,, High</em> 。虽然这样一般会使按键的发送速度超过 <a href="WinActivate.htm">当前窗口</a> 的处理速度，不过系统会自动将按键存入缓存中。在 <a href="Send.htm">Send</a> 命令完成之后，缓存中的按键会继续发送到目标窗口（即使这个窗口不再处于激活状态）。这种情况一般是不要紧的，因为任何并发的对同一个窗口发送的按键事件会自动排列在缓存中的按键事件之后。</p>
<p>如果未进行设置，在 SendEvent 模式中默认的 <em>Delay</em> 是 10（在 .aut 脚本中是 20）。在 <a href="Send.htm#SendPlayDetail">SendPlay 模式</a> 中默认的 <em>Delay</em> 是 -1 。两个模式中默认的 <em>PressDuration</em> 都是 －1 。</p>
<p>内置变量 <strong>A_KeyDelay</strong> 保存了当前 Send/SendEvent 模式中 <em>Delay</em> 参数的设置。没有内置变量保存 <a href="Send.htm#SendPlayDetail">SendPlay 模式</a> 中<em>Delay</em> 参数的设置，也没有内置变量保存 <em>PressDuration</em> 参数的设置。</p>
<p>每一个新运行的 <a href="../misc/Threads.htm">Thread/线程</a>（例如一个 <a href="../Hotkeys.htm">hotkey/热键</a>，<a href="Menu.htm">custom menu item/自定义菜单</a>，或 <a href="SetTimer.htm">timed/定时器</a> 事件）会将该命令的设置重置为默认值。要更改该命令的默认值，可以将该命令放在脚本的自动执行区域（脚本的顶部）。</p>
<h3>相关命令</h3>
<p><a href="Send.htm">Send</a>, <a href="ControlSend.htm">ControlSend</a>, <a href="SendMode.htm">SendMode</a>, <a href="SetMouseDelay.htm">SetMouseDelay</a>, <a href="SetControlDelay.htm">SetControlDelay</a>, <a href="SetWinDelay.htm">SetWinDelay</a>, <a href="SetBatchLines.htm">SetBatchLines</a>, <a href="Click.htm">Click</a></p>
<h3>示例</h3>
<pre class="NoIndent">SetKeyDelay, 0</pre>

</body>
</html>
